package com.student.student.service.impl;

import com.student.common.entity.Student;
import com.student.student.service.StudentService;
import com.student.student.repository.StudentRepository;
import com.student.student.feign.UserServiceClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;

/**
 * 学生服务实现类
 * 
 * @author student
 * @date 2025
 */
@Service
public class StudentServiceImpl implements StudentService {
    
    @Autowired
    private StudentRepository studentRepository;
    
    @Autowired
    private UserServiceClient userServiceClient;
    
    @Override
    public Page<Student> getStudentList(Pageable pageable, String studentId, String name, String major, String className, String status) {
        if (StringUtils.hasText(studentId) || StringUtils.hasText(name) || StringUtils.hasText(major) || StringUtils.hasText(className) || StringUtils.hasText(status)) {
            return studentRepository.findByConditions(studentId, name, major, className, status, pageable);
        }
        return studentRepository.findAll(pageable);
    }
    
    @Override
    public Student getStudentById(String studentId) {
        return studentRepository.findById(studentId).orElse(null);
    }
    
    @Override
    public boolean addStudent(Student student) {
        if (studentRepository.existsById(student.getStudentId())) {
            return false;
        }
        
        student.setCreateTime(LocalDateTime.now());
        student.setUpdateTime(LocalDateTime.now());
        // 如果前端没有设置状态，默认为"在校"
        if (student.getStatus() == null || student.getStatus().trim().isEmpty()) {
            student.setStatus("在校");
        }
        
        // 保存学生信息
        studentRepository.save(student);
        
        // 同步创建用户账号
        try {
            boolean userCreated = userServiceClient.createUser(
                student.getStudentId(),  // 用户名使用学号
                student.getName(),      // 真实姓名
                "学生",                 // 角色
                student.getStudentId(), // 关联ID使用学号
                student.getEmail(),     // 邮箱
                student.getPhone()      // 电话
            );
            
            if (!userCreated) {
                System.err.println("学生用户账号创建失败: " + student.getStudentId());
                // 注意：这里不返回false，因为学生信息已经保存成功
                // 只是用户账号创建失败，可以通过其他方式补救
            } else {
                System.out.println("学生用户账号创建成功: " + student.getStudentId());
            }
        } catch (Exception e) {
            System.err.println("调用用户服务创建学生账号失败: " + e.getMessage());
            // 同样不返回false，避免影响学生信息的保存
        }
        
        return true;
    }
    
    @Override
    public boolean updateStudent(Student student) {
        if (!studentRepository.existsById(student.getStudentId())) {
            return false;
        }
        
        student.setUpdateTime(LocalDateTime.now());
        studentRepository.save(student);
        
        // 同步更新用户信息
        try {
            boolean userUpdated = userServiceClient.updateUserInfo(
                student.getStudentId(),  // 用户名使用学号
                student.getName(),        // 真实姓名
                student.getEmail(),      // 邮箱
                student.getPhone()       // 电话
            );
            
            if (!userUpdated) {
                System.err.println("学生用户信息更新失败: " + student.getStudentId());
            } else {
                System.out.println("学生用户信息更新成功: " + student.getStudentId());
            }
        } catch (Exception e) {
            System.err.println("调用用户服务更新学生信息失败: " + e.getMessage());
        }
        
        return true;
    }
    
    @Override
    public boolean deleteStudent(String studentId) {
        if (!studentRepository.existsById(studentId)) {
            return false;
        }
        
        // 检查是否有选课记录
        // 这里可以调用选课服务检查，简化处理直接删除
        studentRepository.deleteById(studentId);
        
        // 同步删除用户账号
        try {
            boolean userDeleted = userServiceClient.deleteUser(studentId);
            if (!userDeleted) {
                System.err.println("学生用户账号删除失败: " + studentId);
            } else {
                System.out.println("学生用户账号删除成功: " + studentId);
            }
        } catch (Exception e) {
            System.err.println("调用用户服务删除学生账号失败: " + e.getMessage());
        }
        
        return true;
    }
    
    @Override
    public long getStudentCount() {
        return studentRepository.count();
    }
}
